Presto, একটি ডিস্ট্রিবিউটেড SQL কোয়েরি ইঞ্জিন, যেখানে কোয়েরি প্ল্যানিং এবং অপটিমাইজেশন অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি বড় ডেটাসেট এবং জটিল কোয়েরি প্রসেসিং করার জন্য ডিজাইন করা হয়েছে। Presto-তে কোয়েরি পরিকল্পনা এবং অপটিমাইজেশন একটি শক্তিশালী এবং জটিল প্রক্রিয়া, যা কার্যকারিতা এবং স্কেলেবিলিটি উন্নত করতে সহায়ক।
Presto কোয়েরি গ্রহণ করার পর, কোয়েরি পরিকল্পনা করা হয় যাতে এটি কার্যকরভাবে এবং দ্রুত এক্সিকিউট করা যায়। কোয়েরি প্ল্যানিং প্রক্রিয়া কিছু ধাপে বিভক্ত:
প্রথমে, কোয়েরিটি একটি পার্সার দ্বারা বিশ্লেষণ করা হয়। এটি SQL কোয়েরিকে একটি লজিক্যাল ট্রীতে রূপান্তরিত করে। এই ধাপে, কোয়েরির সিনট্যাক্স এবং সেমানটিক্স পরীক্ষা করা হয়।
পার্সিংয়ের পর, Presto একটি লজিক্যাল কোয়েরি প্ল্যান তৈরি করে। এটি SQL কোয়েরির লজিক্যাল কাঠামো এবং স্টেপস নির্ধারণ করে। উদাহরণস্বরূপ:
লজিক্যাল প্ল্যান তৈরি হওয়ার পর, Presto বিভিন্ন অপটিমাইজেশন স্টেপ প্রয়োগ করে:
এটি লজিক্যাল প্ল্যানের ওপর আরও কিছু অপটিমাইজেশন প্রয়োগ করে, যেমন ডিস্কে ডেটা সঞ্চয় করা, ডিস্ট্রিবিউটেড প্রসেসিংয়ের জন্য কাজ ভাগ করা ইত্যাদি। এটি Presto সার্ভারের কার্যকরী অংশ যা কোয়েরি বাস্তবায়ন করে।
Presto কোয়েরি অপটিমাইজেশনের জন্য বেশ কিছু পদ্ধতি প্রয়োগ করে, যা কোয়েরি এক্সিকিউশনকে দ্রুত এবং কার্যকরী করে তোলে। নিচে কিছু গুরুত্বপূর্ণ অপটিমাইজেশন পদ্ধতির বর্ণনা দেওয়া হলো:
Filter pushdown হল একটি অপটিমাইজেশন টেকনিক যেখানে Presto কোয়েরির ফিল্টার অপারেশনকে ডেটাসোর্স (যেমন Hive, MySQL) তে চালানোর জন্য পাঠিয়ে দেয়, যাতে সার্ভারে আনার আগে ডেটা ফিল্টার করা যায়। এর ফলে প্রক্রিয়াকৃত ডেটা অনেক কম হয়, যা কোয়েরির গতি বাড়ায়।
উদাহরণ:
SELECT * FROM employees WHERE salary > 50000;
এটি যদি Hive তে এক্সিকিউট করা হয়, তবে Hive-এ ডেটা স্ক্যান করার সময় শুধুমাত্র সেই রেকর্ডগুলো আনা হবে যেগুলির salary > 50000
।
Presto কোয়েরি অপটিমাইজ করতে প্রয়োজনে শুধুমাত্র প্রয়োজনীয় কলামগুলো ডেটাসোর্স থেকে আনে, অর্থাৎ নির্দিষ্ট কলাম নির্বাচন করে। এর ফলে ডেটা কম আনা হয় এবং এক্সিকিউশন দ্রুত হয়।
উদাহরণ:
SELECT first_name, last_name FROM employees;
এখানে শুধু first_name
এবং last_name
কলামগুলোর ডেটা আনা হবে, সম্পূর্ণ employees
টেবিলের ডেটা না।
Presto কোয়েরি অপটিমাইজ করতে জয়েনগুলির অর্ডার পরিবর্তন করতে পারে। যখন একাধিক টেবিলের সাথে জয়েন করা হয়, তখন সাধারণত ছোট টেবিল প্রথমে জয়েন করা হয়, যাতে কম ডেটা নিয়ে কাজ করা যায় এবং দ্রুত ফলাফল পাওয়া যায়।
Partition pruning হল এমন একটি অপটিমাইজেশন টেকনিক, যেখানে Presto শুধুমাত্র সংশ্লিষ্ট পার্টিশনগুলো স্ক্যান করে, যাতে অপ্রয়োজনীয় ডেটা বাদ যায়। এটি পারফরম্যান্সে ব্যাপক উন্নতি করতে পারে।
Presto-এর কোয়েরি অপটিমাইজার একটি cost-based optimization পদ্ধতি ব্যবহার করে, যেখানে এটি বিভিন্ন অপারেশন এবং প্ল্যানের জন্য খরচ (cost) হিসাব করে এবং সর্বনিম্ন খরচের প্ল্যান নির্বাচন করে।
Presto বিভিন্ন ধরনের জয়েন ব্যবহার করে:
Presto সবচেয়ে দক্ষ জয়েন টাইপ নির্বাচন করতে অপটিমাইজেশনের জন্য কাজ করে।
Presto কোয়েরি এক্সিকিউশন প্ল্যান একটি গ্রাফিক্যাল রেপ্রেজেন্টেশন যা কোয়েরি এক্সিকিউশনের বিভিন্ন স্টেপগুলো কিভাবে প্রক্রিয়া করা হবে তা দেখায়। এটি কোয়েরির এক্সিকিউশন ফেজের পূর্ব পরিকল্পনা হিসেবে কাজ করে এবং কাজগুলো বিভিন্ন Worker নোডে বিতরণ করে।
এক্সিকিউশন প্ল্যান দেখতে:
EXPLAIN SELECT * FROM employees WHERE department = 'Sales';
এই কমান্ডটি আপনাকে কোয়েরি এক্সিকিউশন প্ল্যান দেখাবে, যা আপনি আরও অপটিমাইজেশন বা ডিবাগিং করতে ব্যবহার করতে পারবেন।
Presto কোয়েরি এক্সিকিউশনকে parallel (প্যারালাল) প্রক্রিয়া করতে সক্ষম, যাতে একাধিক নোডের উপর কাজ বিভাজন করা যায়। এটি বড় ডেটাসেট বা জটিল কোয়েরির ক্ষেত্রে সময় কমিয়ে আনে এবং প্রসেসিং দক্ষতা বাড়ায়।
Presto পারফরম্যান্স অপটিমাইজ করার জন্য ডেটা partitioning এবং bucketing ব্যবহার করতে পারে। Partitioning ডেটাকে বিভক্ত করে ছোট অংশে সাজায়, যা দ্রুত কোয়েরি চালাতে সাহায্য করে। Bucketing ডেটাকে নির্দিষ্ট সংখ্যক অংশে ভাগ করে, যা কোয়েরির গতি বাড়ায়।
Presto-তে কোয়েরি পরিকল্পনা এবং অপটিমাইজেশন গুরুত্বপূর্ণ পদক্ষেপ যা ডেটার বিশ্লেষণ এবং এক্সিকিউশনের কার্যকারিতা নিশ্চিত করে। Presto এর বিভিন্ন অপটিমাইজেশন কৌশল যেমন filter pushdown, join reordering, partition pruning এবং cost-based optimization কোয়েরি এক্সিকিউশনকে দ্রুত এবং কার্যকরী করে তোলে।
Presto Query Execution Plan (QEP) হল একটি ডকুমেন্টেশন বা ডায়াগ্রাম যা SQL কোয়েরি এক্সিকিউশনের প্রতিটি ধাপকে বিশ্লেষণ করে। এটি কোয়েরি অপ্টিমাইজেশন, কোয়েরি সম্পাদন এবং কার্যকরী ফলাফল লাভের জন্য গুরুত্বপূর্ণ একটি সরঞ্জাম। Presto QEP আপনাকে একটি কোয়েরি কিভাবে সম্পাদিত হচ্ছে এবং কোয়েরির বিভিন্ন ধাপে কীভাবে ডেটা প্রসেস করা হচ্ছে তা বুঝতে সাহায্য করে।
Presto এর Query Execution Plan বিভিন্ন ধাপে বিভক্ত থাকে, যার মধ্যে প্রধানত কোয়েরি পরিকল্পনা, কোয়েরি পার্সিং, কোয়েরি অপ্টিমাইজেশন, ডিস্ট্রিবিউটেড প্রসেসিং, এবং ফলাফল পুনরুদ্ধার অন্তর্ভুক্ত।
প্রথমে, Presto কোয়েরি টেক্সটটি পঠনযোগ্য আকারে প্রক্রিয়া করে। এটি SQL কোয়েরিকে একটি অভ্যন্তরীণ রূপে (abstract syntax tree - AST) রূপান্তরিত করে, যা পরবর্তী প্রক্রিয়ার জন্য প্রস্তুত।
এটি এক্সিকিউশন প্ল্যান তৈরি করার প্রথম ধাপ। Presto কোয়েরি থেকে বিভিন্ন উপাদান এবং অপারেশন আলাদা করে এবং অপারেশনাল প্ল্যান তৈরির জন্য এগুলোর অর্ডার নির্ধারণ করে। এখানে নিম্নলিখিত ধাপগুলো অন্তর্ভুক্ত থাকতে পারে:
Presto কোয়েরি পরিকল্পনার পরবর্তী ধাপে অপ্টিমাইজেশন প্রক্রিয়া চলে। এখানে কোয়েরি প্ল্যানটি অপ্টিমাইজ করা হয়, যাতে এটি আরও কার্যকরভাবে চালানো যায়। Presto কিছু সাধারণ অপ্টিমাইজেশন কৌশল ব্যবহার করে:
Presto একটি ডিস্ট্রিবিউটেড SQL ইঞ্জিন হওয়ায়, কোয়েরি এক্সিকিউশন প্ল্যান একাধিক Worker Node এর মধ্যে বিভক্ত করা হয়। Presto Coordinator এই কাজটি পরিচালনা করে এবং Worker Node গুলিকে নির্দিষ্ট কাজ (টাস্ক) দেয়।
কোয়েরি এক্সিকিউশনের শেষে, Worker Node গুলি তাদের প্রক্রিয়া করা ফলাফলটি Coordinator-এ পাঠায়, যা সবগুলো ফলাফল একত্রিত করে শেষ ফলাফল প্রস্তুত করে এবং ব্যবহারকারীকে সরবরাহ করে।
Presto কোয়েরি এক্সিকিউশনের পরিকল্পনা দেখতে আপনি EXPLAIN কিওয়ার্ড ব্যবহার করতে পারেন।
উদাহরণ:
EXPLAIN SELECT * FROM hive.default.orders WHERE order_status = 'shipped';
এটি আপনাকে কোয়েরি এক্সিকিউশনের পরিকল্পনা দেখাবে, যেখানে প্রতিটি স্টেপে কী ঘটছে এবং কীভাবে Presto কোয়েরিটি কার্যকর করছে, তা বিশ্লেষণ করা যাবে।
Presto-এর Query Execution Plan কিছু মূল অংশে বিভক্ত থাকে:
GROUP BY
বা COUNT
অপারেশন থাকে, তাহলে এখানে সেই Aggregation প্রক্রিয়া করা হয়।Presto Query Execution Plan আপনাকে একটি কোয়েরি কিভাবে সম্পাদিত হচ্ছে তা বিস্তারিতভাবে দেখায়। এটি কোয়েরি অপ্টিমাইজেশন এবং ডিবাগিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ একটি টুল, বিশেষত বড় ডেটাসেট বা জটিল কোয়েরি সম্পাদন করার সময়। Presto-তে EXPLAIN
কিওয়ার্ড ব্যবহার করে আপনি আপনার কোয়েরির এক্সিকিউশন প্ল্যান দেখতে এবং তার ভিত্তিতে প্রয়োজনীয় অপ্টিমাইজেশন করতে পারবেন।
Presto একটি উচ্চ পারফরম্যান্স SQL কোয়েরি ইঞ্জিন যা বড় ডেটাসেটের উপর দ্রুত কোয়েরি চালাতে সক্ষম। তবে, যখন আপনি বড় ডেটাবেসে বা ডিস্ট্রিবিউটেড সিস্টেমে কোয়েরি চালান, তখন Query Optimization অত্যন্ত গুরুত্বপূর্ণ। সঠিকভাবে অপটিমাইজ করা কোয়েরি পারফরম্যান্স বাড়াতে সাহায্য করে এবং সময় এবং সম্পদ সংরক্ষণ করে। নিচে Presto তে কোয়েরি অপটিমাইজেশনের জন্য কিছু কার্যকর কৌশল আলোচনা করা হল।
Presto তে ডেটাবেস টেবিলের জন্য ইনডেক্স তৈরি করার মাধ্যমে কোয়েরি পারফরম্যান্স বাড়ানো সম্ভব। ইনডেক্স মূলত একটি দ্রুত অনুসন্ধান কাঠামো তৈরি করে যা ডেটাবেসের সার্চ অপারেশনগুলো দ্রুত করে তোলে।
Partitioning ব্যবহার করে বড় টেবিলকে ছোট ছোট অংশে ভাগ করা হয়, যা শুধুমাত্র প্রয়োজনীয় ডেটা প্রক্রিয়া করতে সহায়ক। Presto এ আপনি partitioned tables তৈরি করতে পারেন যা পারফরম্যান্স বৃদ্ধি করে।
উদাহরণ:
CREATE TABLE orders
WITH (partitioned_by = ARRAY['order_date'])
AS SELECT * FROM large_orders;
এটি large_orders
টেবিলের ডেটা order_date
কলামের ভিত্তিতে পার্টিশন করবে।
Data Pruning হল একটি অপটিমাইজেশন কৌশল যা কোয়েরির প্রয়োজনীয় অংশগুলির উপর কাজ করে। যখন আপনি WHERE ক্লজ ব্যবহার করেন, Presto স্বয়ংক্রিয়ভাবে শুধুমাত্র সঠিক ডেটা সিলেক্ট করার চেষ্টা করে, অর্থাৎ Predicate Pushdown এর মাধ্যমে অপ্রয়োজনীয় ডেটা বাদ দেয়।
এটি এমন একটি কৌশল যেখানে Presto মূল কোয়েরি চালানোর আগে ডেটাসোর্সে ডেটা ফিল্টারিং (প্রেডিকেট) অপারেশনটি প্রয়োগ করে, তাই কম ডেটা আনা হয় এবং পরবর্তীতে কম প্রসেসিং করা হয়।
উদাহরণ:
SELECT * FROM orders WHERE order_date > '2023-01-01';
এটি প্রথমে order_date কলামের উপর ফিল্টার প্রয়োগ করবে, এবং তারপর শুধুমাত্র প্রয়োজনীয় ডেটা ডাউনলোড করবে।
কিছু সময়ে কোয়েরি পুনঃলিখন করে অপটিমাইজ করা যায়। সহজ, স্বচ্ছ এবং কার্যকরী কোয়েরি সাধারণত দ্রুত এক্সিকিউট হয়। কোয়েরি JOIN এর কার্যকারিতা, WHERE ক্লজে ফিল্টারিং এবং GROUP BY অপারেশনগুলো সহজ ও পরিষ্কারভাবে লিখলে তা পারফরম্যান্স বৃদ্ধি করতে সাহায্য করবে।
একটি সাবকোয়েরি যদি একই টেবিলের জন্য বারবার চালানো হয়, তাহলে সেটিকে JOIN ব্যবহার করে একীভূত করা যেতে পারে।
অপটিমাইজড কোয়েরি:
SELECT e.employee_name, e.salary, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.salary > 50000;
এটি সাবকোয়েরি ব্যবহারের তুলনায় দ্রুত হবে।
Join Types: Presto বিভিন্ন ধরনের Joins সাপোর্ট করে, যেমন INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN। সঠিক Join type নির্বাচন করা কোয়েরির পারফরম্যান্সকে প্রভাবিত করতে পারে।
NULL
ফেরত দেয়।অপটিমাইজেশন টিপ: যখন সম্ভব হয়, INNER JOIN ব্যবহার করুন কারণ এটি প্রায়ই দ্রুত কাজ করে। যদি LEFT JOIN বা RIGHT JOIN ব্যবহৃত হয়, তবে নিশ্চিত করুন যে আপনার শর্তগুলি সঠিকভাবে সংজ্ঞায়িত করা হয়েছে।
Presto তে কোয়েরি অপটিমাইজেশনের জন্য একটি গুরুত্বপূর্ণ কৌশল হল ডেটা স্ক্যান করা কমানো। SELECT * FROM ব্যবহার না করে শুধুমাত্র প্রয়োজনীয় কলামগুলো নির্বাচন করা উচিত।
অপটিমাইজড কোয়েরি:
SELECT first_name, last_name, department
FROM employees
WHERE department = 'Sales';
এটি শুধুমাত্র প্রয়োজনীয় first_name, last_name, এবং department কলামগুলি নিয়ে কাজ করবে, যেখানে SELECT * FROM সব কলাম নির্বাচন করবে এবং অতিরিক্ত ডেটা স্ক্যান হবে।
Presto একটি Distributed Query Engine হওয়ার কারণে, Query Parallelism এটির পারফরম্যান্সে সহায়ক। বড় এবং জটিল কোয়েরি গুলি parallel execution এ চলতে পারে, যাতে সম্পাদনা দ্রুত হয়।
Presto সিস্টেমে কোয়েরি ক্যাশিং ব্যবহার করে পুনরায় চালানোর সময় কোয়েরির ফলাফলগুলি দ্রুত ফিরিয়ে আনা যেতে পারে। Presto নিজে ক্যাশিং ম্যানেজমেন্ট সিস্টেম সরবরাহ করে না, তবে আপনি external caching systems যেমন Redis বা Memcached ব্যবহার করতে পারেন।
Presto তে Cost-based Query Optimizer (CBO) একটি শক্তিশালী কৌশল, যা কোয়েরি পরিকল্পনা করার সময় বিভিন্ন অপটিমাইজেশন কৌশল নির্ধারণ করে। CBO কোয়েরির খরচ (যেমন, কোয়েরি এক্সিকিউশনের সময়) হিসাব করে এবং সবচেয়ে দক্ষ পরিকল্পনা নির্বাচন করে।
এই কৌশলগুলি ব্যবহার করে আপনি Presto তে কোয়েরির পারফরম্যান্স সঠিকভাবে অপটিমাইজ করতে পারেন।
Cost-based Query Optimizer (CBO) হল একটি গুরুত্বপূর্ণ উপাদান যা Presto এর কোয়েরি এক্সিকিউশনের পারফরম্যান্স উন্নত করে। এটি কোয়েরির জন্য বিভিন্ন এক্সিকিউশন প্ল্যান তৈরি করে এবং সর্বাধিক কার্যকরী (কম খরচে) একটিকে নির্বাচন করে। CBO ডেটাবেসে বিদ্যমান তথ্যের উপর ভিত্তি করে একটি কোয়েরি চালানোর জন্য সবথেকে কম খরচের উপায় খুঁজে বের করে, যেমন কম CPU ব্যবহার, কম মেমরি খরচ, কম ডিস্ক I/O ইত্যাদি।
Presto-তে CBO মূলত কোয়েরির বিভিন্ন এক্সিকিউশন পরিকল্পনা (execution plans) তৈরি করে এবং সেই সব প্ল্যানের খরচের তুলনা করে সর্বোত্তম পরিকল্পনাটি নির্বাচন করে। প্রতিটি পরিকল্পনার জন্য খরচ নির্ধারণ করা হয়, এবং CBO সিস্টেমটি সেই খরচের ভিত্তিতে সর্বোচ্চ কার্যকারিতা অর্জন করতে পারে এমন পরিকল্পনাটি চয়ন করে।
Cost Estimation:
প্রতিটি এক্সিকিউশন প্ল্যানের জন্য CBO খরচের অনুমান করে। এই খরচ সাধারণত নির্ধারিত হয়:
CBO ডেটার পরিসংখ্যান (যেমন টেবিল সাইজ, সারির সংখ্যা, ডেটার বিতরণ) ব্যবহার করে এই খরচের অনুমান তৈরি করে।
ধরা যাক, একটি কোয়েরি:
SELECT a.name, b.salary
FROM employees a
JOIN salaries b ON a.id = b.employee_id
WHERE a.department = 'Engineering'
CBO ছাড়া:
প্রথমে সবগুলো employees
এবং salaries
টেবিলের রেকর্ড পড়ে, তারপর জয়েন করা হয় এবং পরিশেষে department = 'Engineering'
ফিল্টার করা হয়। এটি সমস্ত রেকর্ড পড়ে ফিল্টার এবং জয়েন করার জন্য বেশি ডেটা পড়বে।
CBO এর মাধ্যমে:
CBO প্রথমে a.department = 'Engineering'
ফিল্টারটি ডেটাবেস থেকে চালাবে, যাতে employees
টেবিল থেকে শুধুমাত্র প্রয়োজনীয় রেকর্ডগুলো নেওয়া হয়। এরপর সবচেয়ে কার্যকরী জয়েন পদ্ধতি (যেমন hash join) ব্যবহার করে ফিল্টার করা ডেটার সাথে salaries
টেবিলের ডেটা জয়েন করা হবে।
Presto-তে Cost-based Query Optimizer (CBO) একটি শক্তিশালী টুল যা কোয়েরি এক্সিকিউশনের সময় খরচ কমানোর মাধ্যমে পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে। এটি ডিস্ট্রিবিউটেড সিস্টেমে, বিশেষত বড় ডেটাসেটের উপর কোয়েরি চালানোর সময় অত্যন্ত কার্যকরী। CBO একটি অটোমেটিক অপ্টিমাইজেশন প্রক্রিয়া, যা ডেভেলপার বা ডেটা সায়েন্টিস্টদের ম্যানুয়ালি কোয়েরি অপ্টিমাইজ করতে হয় না।
Presto একটি ডিস্ট্রিবিউটেড SQL কোয়েরি ইঞ্জিন হিসেবে বড় ডেটাসেটের উপর দ্রুত কোয়েরি এক্সিকিউশন সক্ষম করার জন্য Partitioning এবং Bucketing প্রযুক্তি ব্যবহার করতে পারে। এই দুটি কৌশল ডেটা প্রসেসিংয়ে পারফরমেন্স উন্নত করতে সাহায্য করে, বিশেষ করে যখন বিশাল পরিমাণে ডেটা ব্যবহৃত হয়।
Partitioning হল ডেটা স্টোরেজের একটি কৌশল, যেখানে ডেটা বিভিন্ন ভাগে (partitions) বিভক্ত করা হয়, যাতে একটি নির্দিষ্ট কলামের ভিত্তিতে ডেটা অনুসন্ধান দ্রুত হয়। এটি মূলত ডেটা অ্যাক্সেস দ্রুত করার জন্য ব্যবহৃত হয়, কারণ প্রক্রিয়াকৃত ডেটার প্রতিটি ভাগ আলাদা আলাদা স্টোরেজে রাখা হয়, এবং Presto শুধু প্রয়োজনীয় পার্টিশনেই কোয়েরি করে।
sales
টেবিলের ডেটাকে date
কলামের ভিত্তিতে পার্টিশন করতে পারেন, যাতে শুধুমাত্র নির্দিষ্ট মাস বা বছরের ডেটার উপর কোয়েরি চালানো যায়।Hive এবং Presto তে date
কলামের ভিত্তিতে sales
টেবিলকে পার্টিশন করা:
CREATE TABLE sales (
id INT,
product_id INT,
amount DOUBLE
)
PARTITIONED BY (date STRING)
WITH (
format = 'ORC'
);
এখানে, sales
টেবিলের ডেটা date
কলামের ভিত্তিতে পার্টিশন করা হবে।
Bucketing হল একটি ডেটা বিভাজন কৌশল যা ডেটাকে নির্দিষ্ট সংখ্যক ফাইলে ভাগ করে, যাতে প্রতিটি বালতিতে একটি নির্দিষ্ট সংখ্যা বা সীমিত পরিমাণ ডেটা থাকে। এটি সাধারণত hashing বা round-robin ভিত্তিতে কাজ করে।
user_id
বা order_id
) এর উপর ভিত্তি করে ডেটা ভাগ করা হয়। Hashing ফাংশন ব্যবহার করে, প্রতিটি ডেটার জন্য একটি নির্দিষ্ট বালতিতে (bucket) ডেটা রাখা হয়।Hive বা Presto তে user_id
কলামের ভিত্তিতে sales
টেবিলকে ৫টি বালতিতে ভাগ করা:
CREATE TABLE sales (
id INT,
product_id INT,
amount DOUBLE
)
CLUSTERED BY (user_id) INTO 5 BUCKETS
WITH (
format = 'ORC'
);
এখানে, user_id
কলামের ভিত্তিতে ডেটা ৫টি বালতিতে ভাগ করা হয়েছে।
পার্থক্য | Partitioning | Bucketing |
---|---|---|
বিভাগ | ডেটা ভাগ করা হয় নির্দিষ্ট কলাম (যেমন date) দিয়ে। | ডেটা ভাগ করা হয় hashing বা round-robin এর মাধ্যমে। |
উদ্দেশ্য | ডেটা পারফরম্যান্স বৃদ্ধি করা। | স্কেলেবল কোয়েরি এক্সিকিউশন এবং দ্রুত জয়েন অপারেশন। |
ডেটা অ্যাক্সেস | নির্দিষ্ট পার্টিশন থেকে ডেটা আনা হয়। | সমান আকারের buckets এ ডেটা বিভক্ত করা হয়। |
কনফিগারেশন | PARTITIONED BY ব্যবহৃত হয়। | CLUSTERED BY INTO N BUCKETS ব্যবহৃত হয়। |
Read more